package com.developer.logic.modulo.fases;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.developer.core.utils.SimpleLogger;
import com.developer.logic.modulo.equipos.EquipoServicio;
import com.developer.logic.modulo.equipos.dto.Equipo;
import com.developer.logic.modulo.grupos.GrupoServicio;
import com.developer.logic.modulo.grupos.dto.Fase;
import com.developer.mybatis.DBManager;

public class FaseServicio {
	
	private static FaseServicio instance;
	
	public static FaseServicio getInstance() {
		if (instance == null) {
			instance = new FaseServicio();
		}
		
		return instance;
	}
	
	public Fase finalizarFase(Fase fase, StringBuffer mensajeError){
		
		SqlSession session = DBManager.openSession();

		try {
			
			Boolean sinErrores = true;
			Fase faseFinalizada = null;
			List<Equipo> equiposTablaPosiciones = EquipoServicio.getInstance().getTablaPosicionesGeneral();
			
			Long equiposActivos = new Long(0);
			String estado = Equipo.ESTADO_ACTIVO;
			
			
			//Se inactivan los equipos especificados en la fase
			for (Equipo equipo : equiposTablaPosiciones) {
				if(equiposActivos.equals(fase.getTotal_equipos())){
					estado = Equipo.ESTADO_ELIMINADO;
				}
				
				equipo.setEstado(estado);
				sinErrores = EquipoServicio.getInstance().inactivarEquipo(session, equipo, mensajeError) && sinErrores;
				equiposActivos++;
				
				
			}
			
			//Se inactiva la fase
			if(sinErrores){
				
				fase.setEstado(Fase.ESTADO_INACTIVO);
				fase = GrupoServicio.getInstance().inactivarFase(session, fase, mensajeError);
				
				if(fase!= null){
					sinErrores = true; 
				}else{
					
					sinErrores = false;
				}
				
			}
			
			//Si toda la transaccion no tuvo errores se guarda la informacion
			if(sinErrores){
				session.commit();
				faseFinalizada = fase;
			}else{
				session.rollback();
			}
			
			return faseFinalizada;
			
		}catch (Exception e) {
			session.rollback();
			SimpleLogger.error("Error ", e);
			mensajeError.append("Error creando grupo. No se ha podido finalizar correctamente.");
			
			return null;
			
			
		} 	finally {
			session.close();
		}	
	}

	
}
